package com.clstu.Object_;

public class EqualsExercise {
    public static void main(String[] args) {
        Person person = new Person("jack", 20, 'm');
        Person jack=person;
        Person person1 = new Person("jakk", 20, 'm');
//        System.out.println(jack==person);
//        System.out.println(jack.equals(person1));
//        System.out.println(person.equals(person1));
//        System.out.println(jack.equals(person));
//        System.out.println(jack.equals("hhh"));
        System.out.println(jack.isPalindrome("0P"));

    }
}

class Person{
    private String name;
    private int age;
    private char gender;

    public Person(String name, int age, char gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public boolean equals(Object p){//重写Obje对象的equals （）方法，
                          // 不重写就值判断是不是同一个对象，即地址是否相等
                          //不能详细的判断是否内容相同，所以通常自己创建的类都要重写自己的equals()方法
        if(p==this) return true;//先判断是否同一对象
        if(p instanceof Person) {//判断是否同一类型或该类型的子类
             //向下转型
            if (((Person) p).name.equals(this.name) && ((Person) p).age== this.age && ((Person) p).gender == this.gender) {
                return true;
            }
        }
        return false;
    }

    public boolean isPalindrome(String s) {//用于判断一个字符串是否是回文串，（去掉符号之后）
        //if(s.length()<=1) return true;
        char[] v=new char[s.length()];
        int cur=0;
        int x=0;
        char c='x';
        for(x=0;x<v.length;x++){
            c=s.charAt(x);
            if(c>='a' && c<='z' ||c>='A'&&c<='Z'||c>='0'&&c<='9'){
                if(c>='A'&&c<='Z')        v[cur++]=(char)(c+32);
                else                      v[cur++]=c;
            }
        }
        //if(cur<1) return true;
        for(int i=0;i<cur/2;i++){
            if(v[i]!=v[cur-i-1]){
                return false;
            }
        }
        return true;
    }
}